package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 币理财订单实体类，用于存储用户购买币理财产品的订单信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("financial_order")
public class FinancialOrder {

    /**
     * 订单ID，自增长主键。
     */
    @ApiModelProperty(value = "订单ID", example = "1")
    private Long id;

    /**
     * 订单编号，用于唯一标识一个币理财订单。
     */
    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(value = "订单编号", example = "1234567890")
    private Long orderNo;

    /**
     * 会员ID，购买币理财产品的会员ID。
     */
    @ApiModelProperty(value = "会员ID", example = "10001")
    private Long memberId;

    /**
     * 理财产品ID，用户购买的币理财产品ID。
     */
    @ApiModelProperty(value = "理财产品ID", example = "FI123456")
    private String itemId;

    /**
     * 投资币种，用户购买币理财产品时使用的币种。
     */
    @ApiModelProperty(value = "投资币种", example = "BTC")
    private String coinName;

    /**
     * 创建时间，币理财订单创建的时间。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-03-01 12:00:00")
    private LocalDateTime createTime;

    /**
     * 投资金额，用户购买币理财产品的投资金额。
     */
    @ApiModelProperty(value = "投资金额", example = "1000.00")
    private BigDecimal coinNum;

    /**
     * 更新时间，币理财订单最后更新的时间。
     */
    @ApiModelProperty(value = "更新时间", example = "2023-03-01 12:00:00")
    private LocalDateTime updateTime;

    /**
     * 订单状态，币理财订单的当前状态。
     */
    @ApiModelProperty(value = "订单状态", example = "1")
    private int orderState;

    /**
     * 冻结天数，币理财产品的冻结天数。
     */
    @ApiModelProperty(value = "冻结天数", example = "30")
    private int frozenDays;

    /**
     * 订单USDT汇率，币理财订单结算时的USDT汇率。
     */
    @ApiModelProperty(value = "订单USDT汇率", example = "6.5")
    private Double orderUsdtRate;

    /**
     * 预计收益时间，预计币理财订单产生收益的时间。
     */
    @ApiModelProperty(value = "预计收益时间", example = "2023-04-01 12:00:00")
    private LocalDateTime planRevenueTime;

    /**
     * 实际收益，币理财订单实际产生的收益。
     */
    @ApiModelProperty(value = "实际收益", example = "50.00")
    private BigDecimal realIncome;
}
